// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const db = uniCloud.database()
const dbCmd = db.command

module.exports = {
	/**
	 * 提交商户加盟申请
	 * @param {object} params 申请参数
	 * @param {string} params.uid 用户ID
	 * @param {number} params.merchantType 商户类型：0-餐饮，1-零售，2-服饰，3-其他
	 * @param {string} params.shopName 店铺名称
	 * @param {string} params.contactPerson 联系人姓名
	 * @param {string} params.phone 联系电话
	 * @param {string} params.address 店铺地址
	 * @returns {object} 返回结果
	 */
	async submitApplication(params) {
		const { uid, merchantType, shopName, contactPerson, phone, address } = params

		// 验证用户ID
		if (!uid) {
			return {
				errCode: 401,
				errMsg: '未登录'
			}
		}

		// 验证必填字段
		if (!merchantType && merchantType !== 0 || !shopName || !contactPerson || !phone || !address) {
			return {
				errCode: 400,
				errMsg: '请填写完整信息'
			}
		}

		// 验证手机号格式
		const phoneRegex = /^1[3-9]\d{9}$/
		if (!phoneRegex.test(phone)) {
			return {
				errCode: 400,
				errMsg: '手机号格式不正确'
			}
		}

		try {
			// 检查是否已经提交过申请
			const existingApplication = await db.collection('merchantJoin')
				.where({
					user_id: uid,
					state: dbCmd.in([0, 1]) // 待审核或已通过的申请
				})
				.limit(1)
				.get()

			if (existingApplication.data.length > 0) {
				return {
					errCode: 400,
					errMsg: '您已提交过申请，请勿重复提交'
				}
			}

			// 创建申请记录
			const result = await db.collection('merchantJoin').add({
				user_id: uid,
				merchantType,
				shopName,
				contactPerson,
				phone,
				address,
				state: 0,
				create_date: Date.now()
			})

			return {
				errCode: 0,
				errMsg: '申请提交成功',
				data: result
			}

		} catch (error) {
			console.error('提交商户加盟申请失败:', error)
			return {
				errCode: 500,
				errMsg: '提交申请失败，请稍后重试'
			}
		}
	},

	/**
	 * 获取申请状态
	 * @param {string} uid 用户ID
	 * @returns {object} 返回申请状态
	 */
	async getApplicationStatus(uid) {
		if (!uid) {
			return {
				errCode: 401,
				errMsg: '未登录'
			}
		}

		try {
			const result = await db.collection('merchantJoin')
				.where({
					user_id: uid
				})
				.orderBy('create_date', 'desc')
				.limit(1)
				.get()

			return {
				errCode: 0,
				errMsg: '获取成功',
				data: result.data[0] || null
			}

		} catch (error) {
			console.error('获取申请状态失败:', error)
			return {
				errCode: 500,
				errMsg: '获取申请状态失败，请稍后重试'
			}
		}
	},

	/**
	 * 获取商户列表
	 * @returns {object} 返回商户列表
	 */
	async getMerchantList() {
		try {
			const result = await db.collection('merchantJoin')
				.orderBy('create_date', 'desc')
				.get()

			return {
				errCode: 0,
				errMsg: '获取成功',
				data: result.data
			}
		} catch (error) {
			console.error('获取商户列表失败:', error)
			return {
				errCode: 500,
				errMsg: '获取商户列表失败'
			}
		}
	},

	/**
	 * 更新商户申请状态
	 * @param {string} id 申请记录ID
	 * @param {number} state 状态：0-待审核，1-已通过，2-已拒绝
	 * @returns {object} 返回更新结果
	 */
	async updateState(id, state) {
		if (!id) {
			return {
				errCode: 400,
				errMsg: '参数错误'
			}
		}

		if (![0, 1, 2].includes(state)) {
			return {
				errCode: 400,
				errMsg: '状态值无效'
			}
		}

		try {
			await db.collection('merchantJoin').doc(id).update({
				state: state,
				update_time: Date.now()
			})

			// 如果审核通过，需要创建商户账号
			if (state === 1) {
				// 获取申请信息
				const { data: [application] } = await db.collection('merchantJoin')
					.doc(id)
					.get()

				if (application) {
					// 更新用户角色为商户
					await db.collection('uni-id-users')
						.doc(application.user_id)
						.update({
							role: ['merchant']
						})
				}
			}

			return {
				errCode: 0,
				errMsg: '更新成功'
			}
		} catch (error) {
			console.error('更新商户状态失败:', error)
			return {
				errCode: 500,
				errMsg: '更新失败'
			}
		}
	}
}
